プロセス名とPIDのどちらでも指定して一時停止が可能です。昔作ったのですので不具合があるかもしれません。
プロセス名とPIDのどちらでも指定して一時停止が可能です。昔作ったのですので不具合があるかもしれません。
#include "kernel32.as" #include "user32.as" #define global STANDARD_RIGHTS_REQUIRED 0x000f0000 #define global SYNCHRONIZE 0x00100000 #define global THREAD_TERMINATE 0x0001 #define global THREAD_SUSPEND_RESUME 0x0002 #define global THREAD_GET_CONTEXT 0x0008 #define global THREAD_SET_CONTEXT 0x0010 #define global THREAD_SET_INFORMATION 0x0020 #define global THREAD_QUERY_INFORMATION 0x0040 #define global THREAD_SET_THREAD_TOKEN 0x0080 #define global THREAD_IMPERSONATE 0x0100 #define global THREAD_DIRECT_IMPERSONATION 0x0200 #define global THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff) #define global TH32CS_SNAPPROCESS 0x02 #define global TH32CS_SNAPTHREAD 0x04 #module _processkill_ #deffunc _init Count = 0 return #defcfunc CountCheck return Count #deffunc PIDPauseResume int pid,int flag CreateToolhelp32Snapshot TH32CS_SNAPTHREAD,pid hThreadSnap = stat // エラー発生(INVALID_HANDLE_VALUE) if hThreadSnap = 0xFFFFFFFF : return -1 dim th32,7 : th32.0 = length(th32) * 4 Thread32First hThreadSnap,varptr(th32) repeat if th32.3 = pid { OpenThread 0x0002, 0, th32.2 hThread = stat if hThread!=0{ if flag = 0{ // 休止 repeat SuspendThread hThread if (stat != 0){ break } loop }else{ // 再開 repeat ResumeThread hThread if ((stat = 1)| (stat = 0)){ break } loop } CloseHandle hThread } } dim th32,7 : th32.0 = length(th32) * 4 Thread32Next hThreadSnap,varptr(th32) if stat = 0 : break loop if flag = 0 : Count++ : else : Count-- return Count #deffunc ProcessPauseResume str fname,int flg // スナップショット作成 CreateToolhelp32Snapshot TH32CS_SNAPPROCESS,0 hProcessSnap = stat dim pe32 , 9 + (260/4) pe32.0 = length(pe32) * 4 Process32First hProcessSnap,varptr(pe32) ;mes "PID:"+pe32.2 if pe32.9!=0{ sdim filename,261 memcpy filename,pe32.9,260,0,0 ;mes filename } repeat dim pe32 , 9 + (260/4) pe32.0 = length(pe32) * 4 Process32Next hProcessSnap,varptr(pe32) if stat = 0 : break ;mes "PID:"+pe32.2 if pe32.9!=0{ sdim filename,261 memcpy filename,pe32.9,260,0,0 ;mes filename // 小文字に変換 filename = getpath(filename,16) if instr(filename,0,fname)!=-1 : PIDPauseResume pe32.2,flg } loop return #global _init // サンプル ProcessPauseResume "chrome.exe", 0 dialog "OKを押すと復活します" ProcessPauseResume "chrome.exe", 1 // PIDが分かっている場合はこっち ;PIDPauseResume pid, 0